package com.vdong.trade.order.service;

import com.vdong.trade.order.entity.dto.param.*;
import com.vdong.trade.order.entity.dto.result.*;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

/**
 * @description: 知识付费订单流程
 * @author: Mr.WangGang
 * @create: 2018-11-23 上午 11:41
 **/
public interface DisbOrderService {
    <T extends DisbOrderCreateParamDTO> DisbOrderCreateResultDTO create
            (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);

  /*  <T extends DisbOrderApplyPayParamDTO> DisbOrderApplyPayResultDTO applyPay
  (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);
*/
    <T extends DisbOrderPayParamDTO> DisbOrderPayResultDTO pay
    (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);

    <T extends DisbOrderPayDoneParamDTO> DisbOrderPayDoneResultDTO payDone
            (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param) throws Exception ;

    <T extends DisbOrderApplyRefundParamDTO> DisbOrderApplyRefundResultDTO applyRefund
            (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);

    <T extends DisbOrderRefundParamDTO> DisbOrderRefundResultDTO refund
            (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);

    <T extends DisbOrderRefundDoneParamDTO> DisbOrderRefundDoneResultDTO refundDone
            (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);

    <T extends DisbOrderCancelParamDTO> DisbOrderCancelResultDTO cancel
            (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);

    <T extends DisbOrderApplySettlementParamDTO> DisbOrderApplySettlementResultDTO applySettlement
            (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);

    <T extends DisbOrderSettlementParamDTO> DisbOrderSettlementResultDTO settlement
            (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);

    <T extends DisbOrderSettlementDoneParamDTO> DisbOrderSettlementDoneResultDTO settlementDone
            (@Valid @NotNull OrderStateMachineTransitionParamDTO<T> param);

}



